package com.wgz.medicalmanagement.repository;

import com.wgz.medicalmanagement.domain.entity.User;

/**
 * 用户数据访问接口
 *
 * @author medical
 * @since 2023-05-29
 */
public interface UserDao {

    /**
     * 根据用户名查找用户
     *
     * @param username 用户名
     * @return 用户对象
     */
    User findByUsername(String username);

    /**
     * 根据ID查找用户
     *
     * @param id 用户ID
     * @return 用户对象
     */
    User findByIdWithoutOptional(Long id);

    /**
     * 更新用户
     *
     * @param user 用户对象
     * @return 是否更新成功
     */
    boolean update(User user);

    /**
     * 删除用户（逻辑删除）
     *
     * @param id 用户ID
     * @return 是否删除成功
     */
    boolean softDeleteById(Long id);
    
    /**
     * 检查用户名是否已存在
     *
     * @param username 用户名
     * @return 如果存在返回true，否则返回false
     */
    boolean existsByUsername(String username);
    
    /**
     * 检查电子邮箱是否已存在
     *
     * @param email 电子邮箱
     * @return 如果存在返回true，否则返回false
     */
    boolean existsByEmail(String email);
} 